K8s 初探 - 概览
Kubernetes是一个软件系统, 允许部署和管理容器化的应用。使用该系统,用户不需要关心如何维护实体集群关系,也不用徒手部署应用,不必烦恼应用的运行状态,只需要按照系统说明编写描述信息,k8s会按照描述信息自动维护整个集群。对用户,k8s将维护和部署集群化应用的复杂过程隐藏起来并进行了抽象,使得开发者能够更加专注于应用的开发上。同时减轻了运维人员的工作压力
工作原理
大致工作原理如下:
- 用户开发自己的应用, 完成后打包成容器镜像,比如Docker,发布到容器注册平台
- 用户编写应用描述信息,说明应用需要以怎样的组合方式进行运行
- 通过kubernetes控制面板将描述信息传入。kubernetes节点从容器注册平台获取用户开始发布的镜像,进行运行。
- 整个运行期间,kubernetes持续监控应用的部署状态是否与描述文件中的一致,如果单个节点或实例宕机了,则会自动重启该节点,从而保持应用的活跃。
kubernetes优势
- 简化应用部署
- 更好滴利用硬件
- 健康检查和自我修复
- 自动扩容
POD
对于我们来说,在Kubernetes中运行的最小单位是容器,即Docker镜像。但对于Kubernetes来说却不是这样的,它并不直接处理单个容器,而是处理多个共存容器的理念,这组容器叫做POD
一个POD的一组紧密相关的容器,他们总是同时运行在一个节点上,以及同一个linux命名空间中。
每个POD就像一台独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。
注意
由于Kubernetes的最小单位是POD,因此并不能列出单个容器,只能列出POD
应用发布到K8S完整流程
下面展示了一个完整的容器发布到K8S的流程
服务
我们的应用被打包成镜像,运行在容器中,容器在K8S中位于POD中,要访问我们的应用,就要通过IP地址访问POD,但这个IP地址是集群内部的,无法通过外网访问。
要访问到POD,就要通过服务对象将其公开。可以创建一个外部的负载均衡服务,通过负载均衡的公共IP访问POD。
服务存在的另一个关键原因,在于POD的存在可能是短暂的,可能因为K8S内部资源调配,使得一个POD被迁移到另一个节点,也可能一个POD因为某种原因挂掉或消失,存在一个稳定的服务,不管POD如何变化,都能将用户的访问转发给目标POD。
服务、POD、ReplicationController的关系
可以看到,我们是以POD为中心的,服务用于暴露外部IP给用户,ReplicationController用于在POD挂掉时马上重启一个新的POD。
如下展示了当存在多个POD时候的状态